/**
 * Created by LiuJie on 2017/1/3.
 */
/**
 * 时间工具类
 * @type {{getNowDate, getToDay}}
 */
var DateUtils = function(){
    var patternValue = [
        "YYYY-MM-DD",
        "YYYY-MM-DD HH:mm",
        "YYYY-MM-DD 00:00",
        "YYYY-MM-DD 23:59"
    ];
    /**
     * 获取今天
     * @param isTime//是否获取当前时间（时、分）
     * @param isBegin//获取当天的零点
     * @param isEnd//获取当天的结束时间23:59
     * @returns {*}
     */
    function getToDayByMoment(isTime, isBegin, isEnd) {
        if (isTime) {
            return moment().format(patternValue[1]);
        }
        if (isBegin) {
            return moment().format(patternValue[2]);
        }
        if (isEnd) {
            return moment().format(patternValue[3]);
        }
        return moment().format(patternValue[0]);
    }
    /**
     *获取过去n天
     * @param n
     * @param isTime 是否显示时间
     * @returns {*}
     */
    function getLastDayByMoment(n,isTime){
        if(isTime && isTime ==="time"){
            return moment().subtract(parseInt(n),'days').format(patternValue[1]);
        }
        if(isTime && isTime ==="start"){
            return moment().subtract(parseInt(n),'days').format(patternValue[2]);
        }
        return moment().subtract(parseInt(n),'days').format(patternValue[0])
    }

    /**
     * 获取未来n天的时间
     * @param n
     * @param isTime是否显示时间
     */
    function getNextDayByMoment(n,isTime){
        if(isTime && isTime ==="time"){
            return moment().add(parseInt(n),'days').format(patternValue[1]);
        }
        return moment().add(parseInt(n),'days').format(patternValue[0])
    }

    /**
     * 获取当前月
     * @returns {string}
     */
    function getNowMonthByMoment(isDay,isEndDay){
        var _month = parseInt(moment().month()) + parseInt(1);
        if(isDay){
            return moment().year() + "-" + _month +"-01"
        }
        if(isEndDay){
            var shortMonths = [4,6,9,11];
            var dayNum = "-31";
            if (_month === 2) {
                dayNum = "-28";
                if (moment(moment().year()).isLeapYear()) {
                    dayNum = "-29";
                }
            } else {
                for (var i = 0; i < shortMonths.length; i++) {
                    if (_month === shortMonths[i]) {
                        dayNum = "-30";
                    }
                }
            }
            return moment().year() + "-" + _month + dayNum;
        }
        return moment().year() + "-" + _month
    }

    /**
     * 获取过去第n月
     * 从当前天算起(自然月)
     * @param n
     * @param isDay
     */
    function getLastNNatureMonthByMoment(n,isDay){
        var _month = parseInt(moment().month()) + parseInt(1);
        var _lastMonth = parseInt(_month)-(parseInt(n)-1);
        if(isDay && isDay==="day"){
            return moment().year() + "-" + _lastMonth +"-"+"01";
        }
        return moment().year() + "-" + _lastMonth
    }

    /**
     * 获取过去n年前的今天
     * @param n 过去几年
     * @param f 格式化格式
     * @returns {*}
     */
    function getDayOfLastYearByMoment(n,f) {
        var _number = parseInt(n);
        var _now_year = moment().get('year');
        var _last_year = parseInt(_now_year) - _number;
        var _format = f ? f : patternValue[0];
        var _last_year_day = moment().year(_last_year).format(_format);
        return _last_year_day
    }

    /**
     * 格式化时间
     * @param d
     * @param f
     */
    function formatDate(d, f) {
        var _f = f ? f : patternValue[0];
        if (typeof d == "string") {
            return moment(d).format(_f);
        }
    }
    return {
        /**
         *获取当前时间
         * @returns {*}
         */
        getNowDate: function () {
            return getToDayByMoment(true, null, null);
        },
        /**
         * 获取今天不包含时间
         * @returns {*}
         */
        getToDay: function () {
            return getToDayByMoment();
        },
        /**
         *获取一天开始的时间
         *
         * @returns {*}
         */
        getStartOfThisDay: function () {
            return getToDayByMoment(null, true, null);
        },
        /**
         * 获取一天的结束时间
         */
        getEndOfThisDay: function () {
            return getToDayByMoment(null, null, true);
        },
        /**
         * 获取当前月
         * @returns {string}
         */
        getNowMonth:function(isStartDay,isEndDay){
            return getNowMonthByMoment(isStartDay,isEndDay);
        },
        getStartOfThisMonth:function(){
            return getNowMonthByMoment(true);
        },
        getEndOfThisMonth:function(){
            return getNowMonthByMoment(false,true);
        },
        /**
         *获取过去第3个月月份（自然月）
         */
        getLastThirdNatureMonth:function(num,day){
            num = num ? num : 3;
            return getLastNNatureMonthByMoment(num,day);
        },
        /**
         * 获取过去第7天
         */
        getLastSevenDay:function(isTime){
            return getLastDayByMoment(7,isTime);
        },
        /**
         * 获取未来第7天
         * @param isTime
         */
        getNextSevenDay:function(isTime){
            return getNextDayByMoment(7,isTime);
        },
        /**
         * 获取过去第n天
         * @param n
         * @param isTime
         */
        getLastNDay:function(n,isTime){
            return getLastDayByMoment(n,isTime);
        },
        /**
         * 获取未来第n天
         * @param n
         * @param isTime
         */
        getNextNDay:function(n,isTime){
            getNextDayByMoment(n,isTime);
        },
        /**
         * 获取过去第几年的今天
         * @param n
         * @param f
         */
        getDayOfLastYear:function(n,f){
            return getDayOfLastYearByMoment(n,f);
        },
        /**
         * 格式化时间
         * @param d
         * @param f
         * @returns {*}
         */
        format:function(d,f){
            return formatDate(d,f)
        }

    }
}();